]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
network: Don't assume the active connection has been processed first
authorIain Lane <iainl@gnome.org>
Thu, 16 Aug 2018 10:59:36 +0000 (11:59 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Mon, 3 Sep 2018 23:31:17 +0000 (23:31 +0000)
`NMConnectionDevice._sync()` is responsible for setting up the active
connection that we'll end up displaying. It expects the active
connection to already be in a map `_connectionItems`. If it isn't in
there, we get a null dereference and the indicator can get into a weird
state where it doesn't display devices / connections properly.

Let's change this expectation. If there is an active connection,
`_deviceAdded()` will eventually get to it and call `_sync()` to set up
the active connection state. We make `_sync()` tolerate there being no
active connection when it's called.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/140
js/ui/status/network.js

index 3e3d0d1d252654076ff78ba533344896ebd7e12c..d4a09bc320ff8f7dbae210cdb81bcbce8073c6d7 100644 (file)
@@ -420,12 +420,14 @@ var NMConnectionDevice = new Lang.Class({
         this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
 
         if (this._activeConnection == null) {
-            this._activeConnection = this._device.active_connection;
-
-            if (this._activeConnection) {
-                ensureActiveConnectionProps(this._activeConnection, this._client);
-                let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
-                item.setActiveConnection(this._activeConnection);
+            let activeConnection = this._device.active_connection;
+            if (activeConnection && activeConnection.connection) {
+                let item = this._connectionItems.get(activeConnection.connection.get_uuid());
+                if (item) {
+                    this._activeConnection = activeConnection;
+                    ensureActiveConnectionProps(this._activeConnection, this._client);
+                    item.setActiveConnection(this._activeConnection);
+                }
             }
         }